/*
 * @Date: 2023-08-20 19:32:51
 * @LastEditors: Wangjun
 * @LastEditTime: 2023-10-16 14:36:12
 * @FilePath: \nodex\nodemath\op_ola.go
 * @Description:
 */
package nodemath

import (
	"gitee.com/hnxr_1/nodex"
)

func init() {
	nodex.Reister(new(OLA))
}

type OLA struct {
	nodex.Node
	LastX float64      //缓存上一个值
	X     nodex.Double `remark:"输入1"`
	Y     nodex.Double `remark:"输出Y,,out"`
}

func (m *OLA) GetModelID() int {
	return nodex.ModMath
}

/**
 * @description:
 * @param {*nodex.Memory} mem 上一次缓存的结果
 * @return {*}
 */
func (m *OLA) Init(mem *nodex.Memory) (err error) {
	m.UID = m.MakeUID()
	m.Ptr = &m.LastX

	if mem == nil {
		return
	}
	if mem.UID != m.UID {
		return
	}
	m.LastX = nodex.GetNumber[float64](mem.Ptr)
	return
}

/**
 * @description:
 * @return {*}
 */
func (m *OLA) GetName() string {
	return "OLA"
}
func (m *OLA) RegData() []byte {
	return nodex.MakeRegData(m, "前一个周期模拟量", m.GetName(), "")
}

func (m *OLA) Calc() (err error) {
	if m.EnQ {
		if *m.X.Bad {
			m.Bad = true
			return //不计算
		}
	}

	m.Y.Value = m.LastX
	m.LastX = m.X.Value
	return
}
